From bb1463871c156b55585d63492f85a128956c04f5 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 16 Nov 2020 17:28:22 +0000 Subject: [PATCH] a11y: Ensure valid object paths in the fallback code When falling back to using the program name to create a unique base path for the objects on the accessibility bus we need to ensure that the name is a valid DBus object path. --- gtk/a11y/gtkatspiroot.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/gtk/a11y/gtkatspiroot.c b/gtk/a11y/gtkatspiroot.c index 9c23bd8e51..31afbe2316 100644 --- a/gtk/a11y/gtkatspiroot.c +++ b/gtk/a11y/gtkatspiroot.c @@ -659,6 +659,7 @@ gtk_at_spi_root_constructed (GObject *gobject) { const char *app_path = g_application_get_dbus_object_path (application); + /* No need to validate the path */ self->base_path = g_strconcat (app_path, "/a11y", NULL); } else @@ -667,8 +668,27 @@ gtk_at_spi_root_constructed (GObject *gobject) g_get_prgname (), "/a11y", NULL); - } + /* Turn potentially invalid program names into something that can be + * used as a DBus path + */ + size_t len = strlen (self->base_path); + for (size_t i = 0; i < len; i++) + { + char c = self->base_path[i]; + + if (c == '/') + continue; + + if ((c >= '0' && c <= '9') || + (c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c == '_')) + continue; + + self->base_path[i] = '_'; + } + } out: G_OBJECT_CLASS (gtk_at_spi_root_parent_class)->constructed (gobject); -- 2.30.2